// #include <stdio.h>
// #include <stdbool.h>
// #include <limits.h>
// #include <stdlib.h>
// #include "windows.h"
//
// typedef int DataType;
//
// typedef struct TreeNode {
//     DataType value;
//     struct TreeNode* left;
//     struct TreeNode* right;
// } TreeNode;
//
// // 创建新节点
// TreeNode* ChaRuElem(DataType value) {
//     TreeNode* newNode = (TreeNode*)malloc(sizeof(TreeNode));
//     if (newNode == NULL) {
//         exit(0);
//     }
//     newNode->value = value;
//     newNode->right = newNode->left = NULL;
//     return newNode;
// }
//
// // 插入节点
// TreeNode* ChaRuNode(TreeNode* root, DataType value) {
//     if (root == NULL) {
//         return ChaRuElem(value);
//     }
//     if (value < root->value) {
//         root->left = ChaRuNode(root->left, value);
//     } else {
//         root->right = ChaRuNode(root->right, value);
//     }
//     return root;
// }
//
// // 先序遍历
// void PreBianLi(TreeNode* root) {
//     if (root) {
//         printf("%d ", root->value);
//         PreBianLi(root->left);
//         PreBianLi(root->right);
//     }
// }
//
// // 判断是否为平衡二叉树（递归）
// bool isAVL(TreeNode* root, int* height) {
//     if (root == NULL) {
//         *height = 0;
//         return true;
//     }
//
//     int leftHeight, rightHeight;
//     bool leftBalance = isAVL(root->left, &leftHeight);
//     bool rightBalance = isAVL(root->right, &rightHeight);
//
//     //你需要在递归调用中分别获取左子树和右子树的高度。
//     *height = (leftHeight > rightHeight ? leftHeight : rightHeight) + 1;
//
//     //在递归调用中，你需要分别检查左子树和右子树是否平衡，并返回这些状态。
//     return leftBalance && rightBalance && (abs(leftHeight - rightHeight) <= 1);
// }
//
// int main() {
//     SetConsoleOutputCP(CP_UTF8);
//     TreeNode* root = NULL;
//     int values[] = {50, 30, 70, 20, 40, 60, 80};
//     int length = sizeof(values) / sizeof(values[0]);
//
//     for (int i = 0; i < length; i++) {
//         root = ChaRuNode(root, values[i]);
//     }
//
//     printf("先序遍历: ");
//     PreBianLi(root);
//     printf("\n");
//
//     int height = 0;
//     if (isAVL(root, &height)) {
//         printf("该二叉树是平衡二叉树。\n");
//     } else {
//         printf("该二叉树不是平衡二叉树。\n");
//     }
//
//     // 释放二叉树内存
//     // 这里省略了释放树的代码，实际应用中需要正确释放内存
//     free(root);
//     root=NULL;
//     return 0;
// }